package cn.bounce;

import java.awt.*;
import java.awt.geom.*;

/**
 * 6 * A ball that moves and bounces off the edges of a rectangle
 * 7 * Aversion 1.33 2007-05-17
 * 8
 * ©author Cay Horstmann
 * 9
 */
public class Ball {
     static final int XSIZE = 10;
     static final int YSIZE = 10;
    private double x = 0;
    private double y = 0;
    private double dx = 1;
    private double dy = 1;

    Ball(Rectangle bound) {
        x = Math.random() * bound.getMaxX();
        y = Math.random() * bound.getMaxY();
    }

    /**
     * Moves the ball to the next position, reversing direction if it hits one of the edges
     *
     */
    public void move(Rectangle2D bounds) throws InterruptedException {

        x += dx;
        y += dy;
        if (x < bounds.getMinX()) {
            x = bounds.getMinX();
            dx = -dx;
        }
        if (x + XSIZE >= bounds.getMaxX()) {
            x = bounds.getMaxX() - XSIZE;
            dx = -dx;
        }
        if (y < bounds.getMinY()) {
            y = bounds.getMinY();
            dy = -dy;
        }
        if (y + YSIZE >= bounds.getMaxY()) {
            y = bounds.getMaxY() - YSIZE;
            dy = -dy;
        }
    }

    public Ellipse2D getShape() {
        return new Ellipse2D.Double(x, y, XSIZE, YSIZE);
    }

    public double getX() {
        return x;
    }

    public double getY() {
        return y;
    }
}
